package com.nan.interceptor;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import com.jfinal.aop.Interceptor;
import com.jfinal.aop.Invocation;
import com.jfinal.core.Controller;
import com.nan.model.UserInfo;

public class AuthInterceptor implements Interceptor {

	@Override
	public void intercept(Invocation inv) {
		
		Boolean to_login = true;
		
		Controller controller = inv.getController();
		// 拼装登录完成后需要跳转的地址
		// 即转入登录前页面
		String return_uri = inv.getControllerKey() + "/" + 
							inv.getMethodName();
		String query_string = controller.getRequest().getQueryString();
		// 有 Query String 的话进行拼装
		if (query_string != null)
		{
			return_uri += ("?" + query_string);
		}
		// 判断 session 存储的值
		String is_login = controller.getSessionAttr("mm_islogin");
		if (is_login != null && is_login.equals("1"))
		{
			// 检查 session 存储的用户信息
			UserInfo user = controller.getSessionAttr("mm_login_user");
			if (user != null)
			{
				to_login = false;
				inv.invoke();
			}
			else
			{
				// 检查 cookie 存储的用户 id 
				String id = controller.getCookie("mm_login_user");
				if (controller.getCookie("mm_islogin").equals("1") && 
						id != null)
				{
					user = UserInfo.dao.findById(id);
					controller.setSessionAttr("mm_login_user", user);
					to_login = false;
					inv.invoke();
				}
			}
		}
		// 如果以上判断没用通过，则前往登录页面
		if (to_login)
		{
			try {
				controller.redirect("/user/Login/?return_uri=" + URLEncoder.encode(return_uri, "UTF-8"));
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}
		}
	}

}
